package incoming

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/sirupsen/logrus"
	"io"
	"oa-rest/common"
)

// UploadHandler 处理收文上传
func uploadHandler(c *gin.Context) {
	logrus.Info("收到收文上传请求")
	var res common.Response

	// 获取上传人信息
	uploader := c.PostForm("uploader")
	if uploader == "" {
		uploader = "system" // 默认上传人
	}

	// 获取备注信息
	remarks := c.PostForm("remarks")

	// 获取上传的文件
	file, header, err := c.Request.FormFile("file")
	if err != nil {
		logrus.Errorf("获取上传文件失败: %v", err)
		res.Format(c, fmt.Sprintf("获取上传文件失败: %v", err))
		return
	}
	defer file.Close()

	// 读取文件数据
	fileData, err := io.ReadAll(file)
	if err != nil {
		logrus.Errorf("读取文件数据失败: %v", err)
		res.Format(c, fmt.Sprintf("读取文件数据失败: %v", err))
		return
	}

	// 检查文件大小（限制100MB）
	if len(fileData) > 100*1024*1024 {
		res.Format(c, "文件大小不能超过100MB")
		return
	}

	logrus.Infof("开始处理文件上传: %s, 大小: %d bytes, 上传人: %s", header.Filename, len(fileData), uploader)

	// 调用服务层处理上传
	response, err := uploadDocument(fileData, header.Filename, uploader, remarks)
	if err != nil {
		logrus.Errorf("文档上传失败: %v", err)
		res.Format(c, fmt.Sprintf("文档上传失败: %v", err))
		return
	}
	res.Data = map[string]interface{}{
		"fileName":         response.FileName,
		"fileOrganization": response.FileOrganization,
		"fileNumber":       response.FileNumber,
		"fileDate":         response.FileDate,
		"fileTitle":        response.FileTitle,
	}
	logrus.Info("文档解析完成")
	res.Format(c)
}

// RegisterRoutes 注册收文管理路由（简化版，只保留上传接口）
func RegisterRoutes(router *gin.RouterGroup) {
	incomingGroup := router.Group("/incoming")
	{
		// 文件上传解析接口（唯一接口）
		incomingGroup.POST("/upload", uploadHandler)
	}
}
